{% macro render_config(host, address, web_options, ip_suffixes=['']) %}
{# Address: use=if, if=ethX, usev6=ifv6, ifv6=ethX, usev6=webv6, webv6=https://v6.example.com #}
{% for ipv in ip_suffixes %}
use{{ ipv }}={{ address if address == 'web' else 'if' }}{{ ipv }}, \
{%     if address == 'web' %}
{%         if web_options.url is vyos_defined %}
web{{ ipv }}={{ web_options.url }}, \
{%         endif %}
{%         if web_options.skip is vyos_defined %}
web{{ ipv }}-skip='{{ web_options.skip }}', \
{%         endif %}
{%     else %}
if{{ ipv }}={{ address }}, \
{%     endif %}
{% endfor %}
{# Other service options with special treatment for password #}
{% for k,v in kwargs.items() if v is vyos_defined %}
{{ k | replace('_', '-') }}={{ "'%s'" % (v) if k == 'password' else v }}{{ ',' if not loop.last }} \
{% endfor %}
{# Actual hostname for the service #}
{{ host }}
{% endmacro %}
### Autogenerated by service_dns_dynamic.py ###
daemon={{ interval }}
syslog=yes
ssl=yes
pid={{ config_file | replace('.conf', '.pid') }}
cache={{ config_file | replace('.conf', '.cache') }}
{# ddclient default (web=dyndns) doesn't support ssl and results in process lockup #}
web=googledomains
{# ddclient default (use=ip) results in confusing warning message in log #}
use=no

{% if name is vyos_defined %}
{%     for service, config in name.items() %}
{%         if config.description is vyos_defined %}

# {{ config.description }}
{%         endif %}
{%         for host in config.host_name if config.host_name is vyos_defined %}
{#             ip_suffixes can be either of ['v4'], ['v6'], ['v4', 'v6'] for all protocols except 'nsupdate'
               ip_suffixes must be [''] for nsupdate since it doesn't support usevX/wantipvX yet #}
{%             set ip_suffixes = ['v4', 'v6'] if config.ip_version == 'both'
                                 else ([config.ip_version[2:]] if config.protocol != 'nsupdate'
                                       else ['']) %}
{%             set password = config.key if config.protocol == 'nsupdate'
                              else config.password %}
{%             set address = 'web' if config.address.web is vyos_defined
                              else config.address.interface %}
{%             set web_options = config.address.web | default({}) %}

# Web service dynamic DNS configuration for {{ service }}: [{{ config.protocol }}, {{ host }}]
{{ render_config(host, address, web_options, ip_suffixes,
                 protocol=config.protocol, server=config.server, zone=config.zone,
                 login=config.username, password=password, ttl=config.ttl,
                 min_interval=config.wait_time, max_interval=config.expiry_time) }}
{%         endfor %}
{%     endfor %}
{% endif %}
